package com.hzlj.position.locate.service;

import cn.hutool.core.lang.Pair;
import com.fz.common.base.dto.DeleteCommonDTO;
import com.fz.common.base.dto.PageParamDTO;
import com.fz.common.base.dto.QueryPageResultDTO;
import com.hzlj.position.locate.common.dto.reportInspectionAutoSetting.ReportInspectionAutoSettingAddDTO;
import com.hzlj.position.locate.common.dto.reportInspectionAutoSetting.ReportInspectionAutoSettingQueryParamDTO;
import com.hzlj.position.locate.common.dto.reportInspectionAutoSetting.ReportInspectionAutoSettingQueryResultDTO;
import com.hzlj.position.locate.common.dto.reportInspectionAutoSetting.ReportInspectionAutoSettingUpdateDTO;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 通信联络核查-核查-自动配置表(ReportInspectionAutoSetting)表服务接口
 *
 * @author lifh
 * @date 2023-03-13 19:10:14
 */
public interface ReportInspectionAutoSettingService {
    /**
     * 查询单条数据
     *
     * @param id id
     * @return 实例对象
     */
    ReportInspectionAutoSettingQueryResultDTO getReportInspectionAutoSettingById(String id);

    /**
     * 新增数据
     *
     * @param dto 实例对象
     * @return 实例对象
     */
    void saveReportInspectionAutoSetting(ReportInspectionAutoSettingAddDTO dto);

    /**
     * 删除数据
     *
     * @param dto 实例对象
     * @return 是否成功
     */
    boolean deleteReportInspectionAutoSetting(DeleteCommonDTO<String> dto);

    /**
     * 修改数据
     *
     * @param dto 实例对象
     * @return 实例对象
     */
    boolean updateReportInspectionAutoSetting(ReportInspectionAutoSettingUpdateDTO dto);

    /**
     * 是否已经超过最大上报时间
     * day > endTime+maxDelayTime
     */
    boolean isOverTime(Date day, String endTime, Integer maxDelayTime);

    /**
     * 查询列表：分页
     *
     * @param dto  查询条件
     * @param page 分页信息
     * @return 对象列表
     */
    QueryPageResultDTO<ReportInspectionAutoSettingQueryResultDTO> pageReportInspectionAutoSetting(ReportInspectionAutoSettingQueryParamDTO dto, PageParamDTO page);

    /**
     * 获取最匹配的同步配置
     */
    Map<String, ReportInspectionAutoSettingQueryResultDTO> mostMatchedSetting4Sync(Date now);

    /**
     * 获取最匹配的同步配置
     */
    List<ReportInspectionAutoSettingQueryResultDTO> mostMatchedSetting4Sync(String jgCode, Date date);

    /**
     * 随机抽取
     */
    List<Pair<String,ReportInspectionAutoSettingQueryResultDTO>> randomJzryBySetting(Date now);
}
